03c85873e85f42d03baa349918715f5fdbc3806b,work/_tpl/_jsp/ClipTestTemplate.java,ClipTestTemplate,_execute,#PageContext#,61

Before Change


        ExpressionContext expressionContext = pageContext.getExpressionContext();
        // TEXT: lineNumber: 2
        // out.write("<h1>header</h1>\r\n<p>Clip Test</p>\r\n");
        out.write(_jsp_string_1, 0, _jsp_string_1.length);

        // NODE START: lineNumber: 4, offset: 1, length: 2, tagClassName: com.skin.ayada.jstl.core.SetTag, tagInstanceName: _jsp_SetTag_2
        // <c:set var=\"myVar1\" value=\"123\"/>
        pageContext.setAttribute("myVar1", 123);
        // jsp.jstl.core.SetTag END
        // NODE END: lineNumber: 4, tagClassName: com.skin.ayada.jstl.core.SetTag, tagInstanceName: _jsp_SetTag_2

        // TEXT: lineNumber: 4
        // out.write("   ####\r\n");
        out.write(_jsp_string_4, 0, _jsp_string_4.length);

        // NODE START: lineNumber: 6, offset: 4, length: 5, tagClassName: com.skin.ayada.jstl.core.ForEachTag, tagInstanceName: _jsp_ForEachTag_5
        // <c:forEach var=\"myVar\" items=\"1,2,3\">...</c:forEach>
        Object _jsp_old_var_5 = pageContext.getAttribute("myVar");
        com.skin.ayada.jstl.core.ForEachTag _jsp_ForEachTag_5 = new com.skin.ayada.jstl.core.ForEachTag();
        _jsp_ForEachTag_5.setParent((Tag)null);
        _jsp_ForEachTag_5.setPageContext(pageContext);
        _jsp_ForEachTag_5.setVar("myVar");
        _jsp_ForEachTag_5.setItems("1,2,3");
        if(_jsp_ForEachTag_5.doStartTag() != Tag.SKIP_BODY) {
            while(true) {
                // TEXT: lineNumber: 6
                // out.write("    <p>");
                out.write(_jsp_string_6, 0, _jsp_string_6.length);
                // VARIABLE: lineNumber: 7
                expressionContext.print(out, pageContext.getAttribute("myVar"));
                // TEXT: lineNumber: 7
                // out.write("</p>\r\n");
                out.write(_jsp_string_8, 0, _jsp_string_8.length);
                if(_jsp_ForEachTag_5.doAfterBody() != IterationTag.EVAL_BODY_AGAIN) {
                    break;
                }
            }
        }
        _jsp_ForEachTag_5.release();
        pageContext.setAttribute("myVar", _jsp_old_var_5);
        // jsp.jstl.core.ForEachTag END
        // NODE END: lineNumber: 6, tagClassName: com.skin.ayada.jstl.core.ForEachTag, tagInstanceName: _jsp_ForEachTag_5

        // TEXT: lineNumber: 8
        // out.write("###\r\n");
        out.write(_jsp_string_10, 0, _jsp_string_10.length);

        // NODE START: lineNumber: 13, offset: 10, length: 8, tagClassName: com.skin.ayada.jstl.core.ChooseTag, tagInstanceName: _jsp_ChooseTag_11
        // <c:choose>...</c:choose>
        boolean _jsp_ChooseTag_11 = true;

        // NODE START: lineNumber: 14, offset: 11, length: 3, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_12
        // <c:when test=\"${1 == 1}\">...</c:when>
        if(_jsp_ChooseTag_11 && ExpressionUtil.getBoolean(expressionContext, "${1 == 1}")) {
            _jsp_ChooseTag_11 = false;
            // TEXT: lineNumber: 14
            // out.write("        Hello !\r\n");
            out.write(_jsp_string_13, 0, _jsp_string_13.length);
        } // jsp.jstl.core.WhenTag END
        // NODE END: lineNumber: 14, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_12

        // NODE START: lineNumber: 17, offset: 14, length: 3, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_15
        // <c:when test=\"${1 == 1}\">...</c:when>
        if(_jsp_ChooseTag_11 && ExpressionUtil.getBoolean(expressionContext, "${1 == 1}")) {
            _jsp_ChooseTag_11 = false;
            // TEXT: lineNumber: 17
            // out.write("        Hi !\r\n");
            out.write(_jsp_string_16, 0, _jsp_string_16.length);
        } // jsp.jstl.core.WhenTag END
        // NODE END: lineNumber: 17, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_15

        // jsp.jstl.core.ChooseTag END
        // NODE END: lineNumber: 13, tagClassName: com.skin.ayada.jstl.core.ChooseTag, tagInstanceName: _jsp_ChooseTag_11

        // TEXT: lineNumber: 20
        // out.write("###\r\n\r\n<p>test</p>\r\n<p>test</p>\r\n\r\n\r\n###\r\n\r\n");
        out.write(_jsp_string_19, 0, _jsp_string_19.length);

        // jsp:scriptlet: lineNumber: 35
    for(int i = 0; i < 3; i++) {
    
        // jsp:scriptlet END

        // TEXT: lineNumber: 37
        // out.write("<p>");
        out.write(_jsp_string_22, 0, _jsp_string_22.length);

        // jsp:expression: lineNumber: 37
        expressionContext.print(out, (i));
        // jsp:expression END

        // TEXT: lineNumber: 37
        // out.write("</p>\r\n");
        out.write(_jsp_string_25, 0, _jsp_string_25.length);

        // jsp:scriptlet: lineNumber: 39
     }

        // jsp:scriptlet END

        // TEXT: lineNumber: 42
        // out.write("###\r\n");
        out.write(_jsp_string_28, 0, _jsp_string_28.length);

        // jsp:scriptlet: lineNumber: 44
    for(int i = 0; i < 3; i++) {
    
        // jsp:scriptlet END

        // TEXT: lineNumber: 46
        // out.write("<p>");
        out.write(_jsp_string_31, 0, _jsp_string_31.length);

        // jsp:expression: lineNumber: 46
        expressionContext.print(out, (i));

After Change



        // TEXT: lineNumber: 1
        // out.write("\r\n");
        out.write(_jsp_string_3, 0, _jsp_string_3.length);
        // TEXT: lineNumber: 1
        // out.write("<div>\r\n    <h3>");
        out.write(_jsp_string_4, 0, _jsp_string_4.length);
        // EXPRESSION: lineNumber: 2
        expressionContext.print(out, expressionContext.getString("template.home"));
        // TEXT: lineNumber: 2
        // out.write("/include/header.jsp</h3>\r\n    <div class=\"wrap\">header</div>\r\n</div>\r\n");
        out.write(_jsp_string_6, 0, _jsp_string_6.length);

        // jsp:directive.include: lineNumber: 3
        // <jsp:directive.include include="" file="/include/header.jsp"/>

        // TEXT: lineNumber: 3
        // out.write("\r\n");
        out.write(_jsp_string_9, 0, _jsp_string_9.length);

        // jsp:scriptlet: lineNumber: 5
int a=1; 
        // jsp:scriptlet END

        // TEXT: lineNumber: 5
        // out.write("\r\n\r\n<h1>header</h1>\r\n<p>Clip Test</p>\r\n");
        out.write(_jsp_string_12, 0, _jsp_string_12.length);

        // NODE START: lineNumber: 11, offset: 12, length: 2, tagClassName: com.skin.ayada.jstl.core.SetTag, tagInstanceName: _jsp_SetTag_13
        // <c:set var=\"myVar1\" value=\"123\"/>
        pageContext.setAttribute("myVar1", 123);
        // jsp.jstl.core.SetTag END
        // NODE END: lineNumber: 11, tagClassName: com.skin.ayada.jstl.core.SetTag, tagInstanceName: _jsp_SetTag_13

        // TEXT: lineNumber: 11
        // out.write("   #### 1\r\n");
        out.write(_jsp_string_15, 0, _jsp_string_15.length);

        // NODE START: lineNumber: 13, offset: 15, length: 5, tagClassName: com.skin.ayada.jstl.core.ForEachTag, tagInstanceName: _jsp_ForEachTag_16
        // <c:forEach var=\"myVar\" items=\"1,2,3\">...</c:forEach>
        Object _jsp_old_var_16 = pageContext.getAttribute("myVar");
        com.skin.ayada.jstl.core.ForEachTag _jsp_ForEachTag_16 = new com.skin.ayada.jstl.core.ForEachTag();
        _jsp_ForEachTag_16.setParent((Tag)null);
        _jsp_ForEachTag_16.setPageContext(pageContext);
        _jsp_ForEachTag_16.setVar("myVar");
        _jsp_ForEachTag_16.setItems("1,2,3");
        if(_jsp_ForEachTag_16.doStartTag() != Tag.SKIP_BODY) {
            while(true) {
                // TEXT: lineNumber: 13
                // out.write("    <p>");
                out.write(_jsp_string_17, 0, _jsp_string_17.length);
                // VARIABLE: lineNumber: 14
                expressionContext.print(out, pageContext.getAttribute("myVar"));
                // TEXT: lineNumber: 14
                // out.write("</p>\r\n");
                out.write(_jsp_string_19, 0, _jsp_string_19.length);
                if(_jsp_ForEachTag_16.doAfterBody() != IterationTag.EVAL_BODY_AGAIN) {
                    break;
                }
            }
        }
        _jsp_ForEachTag_16.release();
        pageContext.setAttribute("myVar", _jsp_old_var_16);
        // jsp.jstl.core.ForEachTag END
        // NODE END: lineNumber: 13, tagClassName: com.skin.ayada.jstl.core.ForEachTag, tagInstanceName: _jsp_ForEachTag_16

        // TEXT: lineNumber: 15
        // out.write("\r\n\r\n\r\n### 2\r\n");
        out.write(_jsp_string_21, 0, _jsp_string_21.length);

        // NODE START: lineNumber: 20, offset: 21, length: 8, tagClassName: com.skin.ayada.jstl.core.ChooseTag, tagInstanceName: _jsp_ChooseTag_22
        // <c:choose>...</c:choose>
        boolean _jsp_ChooseTag_22 = true;

        // NODE START: lineNumber: 21, offset: 22, length: 3, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_23
        // <c:when test=\"${1 == 1}\">...</c:when>
        if(_jsp_ChooseTag_22 && ExpressionUtil.getBoolean(expressionContext, "${1 == 1}")) {
            _jsp_ChooseTag_22 = false;
            // TEXT: lineNumber: 21
            // out.write("        Hello !\r\n");
            out.write(_jsp_string_24, 0, _jsp_string_24.length);
        } // jsp.jstl.core.WhenTag END
        // NODE END: lineNumber: 21, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_23

        // NODE START: lineNumber: 24, offset: 25, length: 3, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_26
        // <c:when test=\"${1 == 1}\">...</c:when>
        if(_jsp_ChooseTag_22 && ExpressionUtil.getBoolean(expressionContext, "${1 == 1}")) {
            _jsp_ChooseTag_22 = false;
            // TEXT: lineNumber: 24
            // out.write("        Hi !\r\n");
            out.write(_jsp_string_27, 0, _jsp_string_27.length);
        } // jsp.jstl.core.WhenTag END
        // NODE END: lineNumber: 24, tagClassName: com.skin.ayada.jstl.core.WhenTag, tagInstanceName: _jsp_WhenTag_26

        // jsp.jstl.core.ChooseTag END
        // NODE END: lineNumber: 20, tagClassName: com.skin.ayada.jstl.core.ChooseTag, tagInstanceName: _jsp_ChooseTag_22

        // TEXT: lineNumber: 27
        // out.write("\r\n### 3\r\n<p>test</p>\r\n<p>test</p>\r\n### 4\r\n\r\n");
        out.write(_jsp_string_30, 0, _jsp_string_30.length);

        // jsp:scriptlet: lineNumber: 37
    for(int i = 0; i < 3; i++) {
    
        // jsp:scriptlet END

        // TEXT: lineNumber: 39
        // out.write("<p>");
        out.write(_jsp_string_33, 0, _jsp_string_33.length);

        // jsp:expression: lineNumber: 40
        expressionContext.print(out, (i));
        // jsp:expression END

        // TEXT: lineNumber: 40
        // out.write("</p>\r\n");
        out.write(_jsp_string_36, 0, _jsp_string_36.length);

        // jsp:scriptlet: lineNumber: 41
     }

        // jsp:scriptlet END

        // TEXT: lineNumber: 43
        // out.write("\r\n### 5\r\n");
        out.write(_jsp_string_39, 0, _jsp_string_39.length);

        // jsp:scriptlet: lineNumber: 47
    for(int i = 0; i < 3; i++) {
    
        // jsp:scriptlet END

        // TEXT: lineNumber: 49
        // out.write("<p>");
        out.write(_jsp_string_42, 0, _jsp_string_42.length);

        // jsp:expression: lineNumber: 49
        expressionContext.print(out, (i));
        // jsp:expression END

        // TEXT: lineNumber: 49
        // out.write("</p>\r\n");
        out.write(_jsp_string_45, 0, _jsp_string_45.length);

        // jsp:scriptlet: lineNumber: 51
     }

        // jsp:scriptlet END

        // TEXT: lineNumber: 54
        // out.write("## 6\r\n这是一个格å¼?处ç?†çš„æµ‹è¯•页é?¢ï¼Œæµ‹è¯•编译程åº?çš„clip函数是å?¦æ­£ç¡®ã€‚\r\n编译程åº?对标签的处ç?†è§„则:\r\n1. jsp指令ã€?jsp生命ã€?jsp脚本ã€?Ayada指令,都会统一删除掉å‰?导空格和å?Žç¼€å›žè½¦ã€‚ä¸?支æŒ?é…?置,统一处ç?†ã€‚\r\n2. 标签é…?置增加ignore-whitespace选项,å?¯é€‰å€¼[true|false],如果是true,删除掉å‰?导空格和å?Žé?¢çš„回车。默认是true。t:import指令对应的属性是ignoreWhitespace。\r\nå‰?导空格包括空格和\\t符。\r\nå?Žç¼€å›žè½¦åŒ…括\\rå’Œ\\n。å?ªåˆ é™¤ç¬¬ä¸€ä¸ªå›žè½¦ã€‚\r\n\r\n编译程åº?在编译出æ?¥æ‰€æœ‰èŠ‚ç‚¹åˆ—è¡¨ä¹‹å?Žï¼Œä¼šå¯¹èŠ‚ç‚¹åˆ—è¡¨è¿›è¡Œä¸¤æ¬¡æ‰«æ??:\r\n1. 第一次扫æ??,根æ?®æ ‡ç­¾çš„ignoreWhitespace定义决定是å?¦å¯¹æ ‡ç­¾å?šæ ¼å¼?处ç?†ã€‚\r\n   如果ignoreWhitespace为true,则删除标签的å‰?导空格,å‰?导空格是指标签å‰?é?¢çš„第一个文本节点的尾空格。\r\n   删除标签之å?Žçš„第一个回车æ?¢è¡Œç¬¦ã€‚标签的开始节点和结æ?ŸèŠ‚ç‚¹éƒ½æŒ‰ç…§è¿™ä¸ªçš„è§„åˆ™å¤„ç?†ã€‚所有的jsp指令ã€?脚本ã€?声明也按照这个规则处ç?†ã€‚\r\n\r\n2. 第二次扫æ??,根æ?®æ ‡ç­¾çš„bodyContent定义清除标签内的文本节点或者。\r\n\r\n总的原则是:标签或者脚本所å? çš„行ä¸?输出。å?³ï¼šæŠŠæ ‡ç­¾æˆ–者脚本所å? çš„行删除之å?Žå°±æ˜¯æœ€ç»ˆè¾“出的格å¼?。 \r\n");
        out.write(_jsp_string_48, 0, _jsp_string_48.length);

        out.flush();
        jspWriter.flush();